import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager

# 1. 字体配置（解决中文显示问题）
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 更美观的字体
plt.rcParams['axes.unicode_minus'] = False

# 2. 数据读取与处理
file_path = 'warehouse_xian_poi.csv'
df = pd.read_csv(file_path)
type_proportions = df['type'].value_counts(normalize=True) * 100  # 转为百分比

# 3. 颜色优化（匹配原图风格）
colors = {
    'scope': '#1f77b4',  # 主蓝色
    'shopping': '#ff7f0e',  # 橙色
    'category3': '#2ca02c',  # 绿色
    'category4': '#d62728'  # 红色
}

# 4. 可视化优化
fig, ax = plt.subplots(figsize=(12, 10))

# 环形图参数优化
wedges, texts, autotexts = ax.pie(
    type_proportions,
    labels=type_proportions.index,
    colors=[colors.get(x, '#9467bd') for x in type_proportions.index],  # 颜色映射
    startangle=90,
    wedgeprops={'width': 0.3, 'edgecolor': 'white', 'linewidth': 2},
    autopct='%1.1f%%',
    pctdistance=0.75,  # 调整百分比位置
    textprops={'fontsize': 12, 'fontweight': 'bold'}
)

# 5. 标签防重叠处理
plt.setp(autotexts,
         bbox=dict(boxstyle="round,pad=0.2",
                  fc="white", ec="gray", alpha=0.8))

# 6. 添加图例（替代拥挤的饼图标签）
ax.legend(wedges,
          [f"{l} ({s:.1f}%)" for l, s in zip(type_proportions.index, type_proportions)],
          title="POI类型",
          loc="center left",
          bbox_to_anchor=(1, 0.5),
          fontsize=12)

# 7. 标题和布局优化
plt.title('西安POI类型占比分布',
          fontsize=18, pad=20, fontweight='bold')
plt.tight_layout(rect=[0, 0, 0.85, 1])  # 为图例留空间

plt.savefig('optimized_poi_distribution.png', dpi=300, bbox_inches='tight')
plt.show()



# import pandas as pd
#
# # 读取 CSV 文件
# file_path = 'warehouse_xian_poi.csv'
# df = pd.read_csv(file_path)
#
# # 计算每种 type 的数量和比例
# type_counts = df['type'].value_counts()
# type_proportions = df['type'].value_counts(normalize=True)
#
# # 打印结果
# print("每种 type 的数量:")
# print(type_counts)
# print("\n每种 type 的比例:")
# print(type_proportions)
#
# # 如果你想以百分比形式显示（可选）
# print("\n每种 type 的百分比:")
# print(type_proportions.apply(lambda x: f"{x:.2%}"))




# import pandas as pd
#
# # 读取 CSV 文件
# file_path = 'warehouse_xian_poi.csv'
# df = pd.read_csv(file_path)
#
# # 获取列 'query_category' 的唯一值
# unique_values = df['query_category'].unique()
#
# # 打印唯一值及其数量
# print("Unique values in 'query_category':", unique_values)
# print("Number of unique values:", len(unique_values))
